package demo5;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

//@Component注解：表示一个Bean，受容器管理
//@Controller注解：用于与客户端打交道，表示一个Bean，受容器管理
//@Service注解：业务逻辑层，处理业务逻辑，表示一个Bean，受容器管理
//@Repository注解，用于和数据库打交道（数据持久层），表示一个Bean，受容器管理

/**
 * 如果没有什么特殊的要求作用，我们用@Component注解就可以了
 */
@Component
public class Person {
    /*
    * @Autowired注解 自动装配注解  依赖注入
    * @Autowired注解：表示自动注入，会根据类型进行注入，如果类型相同，会报错
     */
    //@Autowired
    /*
    * @Resource注解：javaEE(java原生提供的注解)提供的注解，表示自动注入，会根据名称进行注入
    * 虽然不是Spring框架里面的注解，但是Spring框架支持这个注解
    * @Resource注解，默认的装配机制与 @Autowired注解是一致的，依靠类型来匹配
    *
    * 但是  @Resource注解，也可以通过name属性来指定名称来匹配！！！！！！可以解决装配冲突问题
    *       1、 @Resource(name="类名")，虽然传入是类名，但是首字母要小写
    *       2、 @Resource 另一种更不理想，在定义属性名的时候，使用与类名相同的名字，也是小写，例如以下写法：
    *           @Resource()
    *           private Clothes sweater;
    *        实际开发中，基本很少用这个注解，华而不实。还不是纯的，不属于Spring的注解
    *
     */
    //@Resource(name = "shirt")//这种方式有不好的地方，被限制死了，要求注入的类必须叫这个名字，十分的不理想
    @Resource(name = "sweater")
    private Clothes clothes;
    public void play(){
        clothes.wear();
        System.out.println("出去玩");
    }
}
